gdk/x11: don't select RANDR events if the extension is missing
authorJulien Cristau <jcristau@debian.org>
Thu, 23 Dec 2010 12:50:13 +0000 (13:50 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 3 Jan 2011 17:13:30 +0000 (12:13 -0500)
Prevents an Xlib warning on Xnest, or Xorg with xinerama, or other
non-RANDR-capable xserver.  Reintroduce a have_randr12 field in
GdkDisplayX11 to avoid having to call XRRQuery{Extension,Version} twice,
and don't select randr 1.2 events if that's false.

https://bugzilla.gnome.org/show_bug.cgi?id=634711

Signed-off-by: Julien Cristau <jcristau@debian.org>
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkdisplay-x11.h
gdk/x11/gdkscreen-x11.c

index a2313322254841a5b82f0faa0cd9a992af32e260..e406bb83e36c3dc494060a4542c17d20cddc0812 100644 (file)
@@ -1220,6 +1220,7 @@ _gdk_x11_display_open (const gchar *display_name)
   _gdk_x11_precache_atoms (display, precache_atoms, G_N_ELEMENTS (precache_atoms));
 
   /* RandR must be initialized before we initialize the screens */
+  display_x11->have_randr12 = FALSE;
   display_x11->have_randr13 = FALSE;
 #ifdef HAVE_RANDR
   if (XRRQueryExtension (display_x11->xdisplay,
@@ -1229,8 +1230,11 @@ _gdk_x11_display_open (const gchar *display_name)
 
       XRRQueryVersion (display_x11->xdisplay, &major, &minor);
 
-      if ((major == 1 && minor >= 3) || major > 1)
-         display_x11->have_randr13 = TRUE;
+      if ((major == 1 && minor >= 2) || major > 1) {
+         display_x11->have_randr12 = TRUE;
+         if (minor >= 3 || major > 1)
+             display_x11->have_randr13 = TRUE;
+      }
 
        gdk_x11_register_standard_event_type (display, display_x11->xrandr_event_base, RRNumberEvents);
   }
index e19c57f3f9e14f94d15c455ad18953ab59452bf5..cd72cfae625e2a164f482e09e7ad66d0e4d3e4b0 100644 (file)
@@ -67,6 +67,7 @@ struct _GdkX11Display
   gboolean have_xdamage;
   gint xdamage_event_base;
 
+  gboolean have_randr12;
   gboolean have_randr13;
   gint xrandr_event_base;
 
index a42938b4aad2287ebe256d495b44761ecef00bde..85aa09afc99a7d604f64f2ca08b616a5e7916375 100644 (file)
@@ -1,7 +1,7 @@
  /*
  * gdkscreen-x11.c
- * 
- * Copyright 2001 Sun Microsystems Inc. 
+ *
+ * Copyright 2001 Sun Microsystems Inc.
  *
  * Erwann Chenede <erwann.chenede@sun.com>
  *
@@ -842,20 +842,23 @@ gdk_x11_screen_is_composited (GdkScreen *screen)
 }
 
 static void
-init_randr_support (GdkScreen * screen)
+init_randr_support (GdkScreen *screen)
 {
   GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
-  
+
   XSelectInput (GDK_SCREEN_XDISPLAY (screen),
-               x11_screen->xroot_window,
-               StructureNotifyMask);
+                x11_screen->xroot_window,
+                StructureNotifyMask);
 
 #ifdef HAVE_RANDR
+  if (!GDK_X11_DISPLAY (gdk_screen_get_display (screen))->have_randr12)
+    return;
+
   XRRSelectInput (GDK_SCREEN_XDISPLAY (screen),
-                 x11_screen->xroot_window,
-                 RRScreenChangeNotifyMask      |
-                 RRCrtcChangeNotifyMask        |
-                 RROutputPropertyNotifyMask);
+                  x11_screen->xroot_window,
+                  RRScreenChangeNotifyMask
+                  | RRCrtcChangeNotifyMask
+                  | RROutputPropertyNotifyMask);
 #endif
 }